/// 1. 父trait用于在另一个trait中使用某trait的功能
/// - 有时我们可能需要某个trait使用另一个trait的功能
/// - 在这种情况下，需要能够依赖相关的trait也被实现
/// - 这个所需的trait是我们实现的trait的父（超）trait（super trait）

use std::fmt;

trait OutPrint: fmt::Display { // 要求实现Display 的 trait
    fn out_print(&self) {
        let output = self.to_string();
        println!("output: {}", output);
    }
}
struct Point {
    x: i32,
    y: i32,
}
impl OutPrint for Point {}

impl fmt::Display for Point {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "({}, {})", self.x, self.y)
    }
}
fn main() {
    let p = Point {x: 1, y: 2};
    p.out_print();
    println!("Hello, world!");
}
